package com.chinatechstar.component.commons.handler;

import com.chinatechstar.component.commons.utils.DateUtils;
import org.apache.ibatis.type.*;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 * Date转年份String 存储
 *
 * @author Rei
 * @date 2021/3/29
 */
@MappedJdbcTypes({JdbcType.DATE})
@MappedTypes({Date.class})
public class YearOnlyTypeHandler implements TypeHandler<Date> {

    /**
     * 入库前的类型转换
     *
     * @param ps        SQL
     * @param i         下表
     * @param parameter 参数
     * @param jdbcType  数据库类型
     */
    @Override
    public void setParameter(PreparedStatement ps, int i, Date parameter,
                             JdbcType jdbcType) throws SQLException {
        ps.setString(i, String.valueOf(DateUtils.getYear(parameter)));
    }

    /**
     * 查询后的数据处理
     *
     * @param rs         结果集
     * @param columnName 列名称
     * @return Date
     */
    @Override
    public Date getResult(ResultSet rs, String columnName) throws SQLException {
        return new Date(rs.getLong(columnName));
    }

    @Override
    public Date getResult(ResultSet rs, int columnIndex) throws SQLException {
        return new Date(rs.getLong(columnIndex));
    }

    @Override
    public Date getResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        return cs.getDate(columnIndex);
    }

}
